package com.faceye.core.service.impl;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.faceye.core.service.QueueService;

public abstract class QueueServiceImpl<T> implements QueueService<T> {

	protected Logger logger = LoggerFactory.getLogger(getClass());


	@SuppressWarnings("unchecked")
	@Override

	synchronized public T get() {
		T o = (T) this.getQueue().poll();
		return o;
	}

	@SuppressWarnings("unchecked")
	@Override
	public void add(T o) {
		this.getQueue().add(o);
	}

	/**
	 * 添加整个集合
	 * @todo
	 * @param collections
	 * @
	 * @author:@haipenge
	 * haipenge@gmail.com
	 * 2014年1月2日
	 */
	@SuppressWarnings("unchecked")
	public void addAll(Collection<T> collections) {
		this.getQueue().addAll(collections);
	}

	/**
	 * 是否为空
	 */
	public Boolean isEmpty() {
		Boolean res = Boolean.TRUE;
		if (this.getQueue() != null && this.getQueue().size() > 0) {
			res = Boolean.FALSE;
		}
		return res;
	}

	public int getSize() {
		int size = 0;
		if (!isEmpty()) {
			size = this.getQueue().size();
		}
		return size;
	}

//	/**
//	 * 添加队列观察者
//	 * @param queueObserver
//	 */
//	public void addObserver(QueueObserver queueObserver){
//		if(queueObservers==null){
//			queueObservers=new ArrayList<QueueObserver>(10);
//		}
//		queueObservers.add(queueObserver);
//	}
//
//	/**
//	 * 删除队列观察者
//	 * @param queueObserver
//	 */
//	public void removeQueueObserver(QueueObserver queueObserver){
//		if(CollectionUtils.isNotEmpty(queueObservers)){
//			int index = queueObservers.indexOf(queueObserver);
//			if(index>=0){
//				queueObservers.remove(queueObserver);
//			}
//		}
//	}
//
//	/**
//	 * 通知观察者
//	 */
//	public  void notifyObservers(){
//		if(CollectionUtils.isNotEmpty(queueObservers)){
//			for(QueueObserver queueObserver:queueObservers){
//				queueObserver.update();
//			}
//		}
//	}
}
